﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RRTWSEntityDSD.Dominio;
using WebServiceDSDG6.Persistencia;
using System.Data.SqlClient;

namespace RRTWSEntityDSD.Dao
{
    public class EntradaDAO : BaseDAO<Entrada, int>
    {
        public RRTWSEntityDSD.Dominio.Entrada crear(int evento, string fechaRegistro, double precio, int estado, int idOperacion, int idasiento)
        {
            Entrada e = new Entrada() { evento = evento, fechaRegistro = fechaRegistro, estado = estado, idOperacion = idOperacion, idasiento = idasiento };
            return Crear(e);
        }

        public Entrada getEntradaPorEvento(int idasiento, int evento, int idOperacion)
        {
            try
            {
                string query = "select * from ENTRADA  where ASI_ID_ASIENTO = " + idasiento + " and EVE_ID_EVENTO = " + idOperacion + " and OPE_ID_OPERACION = " + idOperacion;

                SqlCommand cmd = new SqlCommand(query, cnx);
                cnx.Open();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        if (!Convert.IsDBNull(dr["ENT_ID_ENTRADA"]))
                        {
                            Entrada e = new Entrada()
                            {
                                identrada = int.Parse(dr["ENT_ID_ENTRADA"].ToString()),
                                evento = int.Parse(dr["EVE_ID_EVENTO"].ToString()),
                                fechaRegistro = dr["ENT_FECHA_REG_ENTRADA"].ToString(),
                                precio = double.Parse(dr["ENT_PRECIO"].ToString()),
                                estado = int.Parse(dr["EST_ID_ESTADO"].ToString()),
                                idOperacion = int.Parse(dr["OPE_ID_OPERACION"].ToString()),
                                idasiento = int.Parse(dr["ASI_ID_ASIENTO"].ToString())

                            };
                            return e;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new InvalidOperationException("Error de conexiones  ");
            }

            finally
            {
                cnx.Close();
            }
            return null;

        }

        public List<Entrada> getListaEntradaPorEvento(int idOperacion)
        {
            try
            {
                string query = " select * from ENTRADA  where OPE_ID_OPERACION = " + idOperacion ;

                SqlCommand cmd = new SqlCommand(query, cnx);
                cnx.Open();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {

                    List<Entrada> listaEntradas = new List<Entrada>();
                    while (dr.Read())
                    {

                        if (!Convert.IsDBNull(dr["ENT_ID_ENTRADA"]))
                        {
                            Entrada e = new Entrada()
                            {
                                identrada = int.Parse(dr["ENT_ID_ENTRADA"].ToString()),
                                evento = int.Parse(dr["EVE_ID_EVENTO"].ToString()),
                                fechaRegistro = dr["ENT_FECHA_REG_ENTRADA"].ToString(),
                                precio = double.Parse(dr["ENT_PRECIO"].ToString()),
                                estado = int.Parse(dr["EST_ID_ESTADO"].ToString()),
                                idOperacion = int.Parse(dr["OPE_ID_OPERACION"].ToString()),
                                idasiento = int.Parse(dr["ASI_ID_ASIENTO"].ToString())

                            };
                            listaEntradas.Add(e);
                        }
                    }

                    return listaEntradas;
                }
            }
            catch (Exception e)
            {
                throw new InvalidOperationException("Error de conexiones  ");
            }

            finally
            {
                cnx.Close();
            }
            return null;
        }

        public Entrada update(Entrada entr)
        {
            return Modificar(entr);
        }

        public Entrada getEntrada(int entrada)
        {
            return Obtener(entrada);
        }
    }
}